﻿using Mbs.Modularity.AddIns;

namespace Mbs.Modularity
{
    /// <summary>
    /// 模块元数据接口
    /// </summary>
    /// <remarks>
    /// 模块和插件是一个意思，一个模块或插件可以最多拥有一个插件配置文件
    /// 配置文件的规则是：如果一个模块的dll是ModuleA.dll,那么它的配置文件
    /// 必须是ModuleA.dll.AddIn。
    /// </remarks>
    public interface IModuleMeta
    {
        /// <summary>
        /// 得到模块名称
        /// </summary>
        /// <remarks>
        /// 当一个模块拥有插件配置文件时,模块名称和插件名称是一样的，否则模块名称和AssemblyName是一样的
        /// </remarks>
        string Name { get; }
        /// <summary>
        /// 得到插件的AssemblyFile
        /// </summary>
        string AssemblyFile { get; }
        /// <summary>
        /// 得到插件的版本信息
        /// </summary>
        string Version { get; }
        /// <summary>
        /// 得到插件的更新位置
        /// </summary>
        string UpdateLocation { get; }
        /// <summary>
        /// 得到或设置插件是否进行懒惰加载
        /// </summary>
        bool LazyLoad { get; set; }
        /// <summary>
        /// 得到一个值用来判断是否是系统插件
        /// </summary>
        /// <remarks>
        /// 系统插件是不能被直接卸载的
        /// </remarks>
        bool IsSystem { get; }

        /// <summary>
        /// 得到插件元数据
        /// </summary>
        IAddIn AddIn { get;}

        /// <summary>
        /// 加载插件元数据
        /// </summary>
        void LoadAddIn();
    }
}